package net.tksl.crm.controller;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import net.tksl.crm.controller.view.bean.CuentaBean;
import net.tksl.crm.controller.view.bean.JSONJQGridTableBean;
import net.tksl.crm.controller.view.bean.UsuarioSistemaBean;
import net.tksl.crm.service.CuentaService;
import net.tksl.crm.util.WebUtil;

import org.apache.struts2.ServletActionContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

@Controller(value="cuentasAction")
@Scope(value="prototype")
public class CuentasAction extends ActionSupport {

	private static final long serialVersionUID = 1L;

	@Autowired
	@Qualifier("cuentaServiceImpl")
	private CuentaService cuentaService;

	private Gson gson;
	
	public CuentasAction(){
		gson = new Gson();
	}
	
	public String init(){
		UsuarioSistemaBean usuarioSistema = (UsuarioSistemaBean)WebUtil.leerAtributoSesion("usuarioSistema");
		if(usuarioSistema!=null){
			HttpServletRequest request = ServletActionContext.getRequest();
			request.setAttribute("tituloPagina","::Administraci\u00f3n de Cuentas::");
			return "init";
		}else{
			return "inicio";
		}
	}
	
	public String listar_Cuentas(){
		
		HttpServletRequest request = ServletActionContext.getRequest();
		
		String strPage = request.getParameter("page");
		Integer pagina = Integer.parseInt(strPage);
		
		String strRows = request.getParameter("rows");
		Integer numFilas = Integer.parseInt(strRows);
		
		String campoOrden = request.getParameter("sort");
		String tipoOrden = request.getParameter("order");
		
		Map<String,Object> filtros = new HashMap<String,Object>();
		filtros.put("pagina",pagina);
		filtros.put("numFilas",numFilas);
		filtros.put("campoOrden",campoOrden);
		filtros.put("tipoOrden",tipoOrden);
		
		List<CuentaBean> lstCuentaBean = cuentaService.listarCuentas(filtros);

		//Convertir las cuentas al formato para la tabla
		JSONJQGridTableBean tableBean = new JSONJQGridTableBean();

		Integer totalRegistros = (Integer)filtros.get("totalRegistros");

		tableBean.setTotal(totalRegistros);

		String jsonCuentas = "[]";
		if(lstCuentaBean!=null && lstCuentaBean.size()>0){
			tableBean.setRows(lstCuentaBean);
		}else{
			tableBean.setRows(new ArrayList<CuentaBean>());
		}
		
		Type typeTableBean = new TypeToken<JSONJQGridTableBean>(){}.getType();
		jsonCuentas = gson.toJson(tableBean,typeTableBean);

		request.setAttribute("json",jsonCuentas);

		return Action.SUCCESS;
	}
	
	public void registrarCuenta(){
		/*
		FacesContext facesContext = FacesContext.getCurrentInstance();
		FacesMessage msg = null;

		String mensaje = "";
		if(cuentaEdicionCreacion.getNombreCuenta().trim().equals("")){
			JsfUtil.agregarMensaje(facesContext,msg,idFormulario+":"+idNotificacion,"Error","El nombre no debe estar vac\u00edo",FacesMessage.SEVERITY_ERROR);
		}else if(cuentaEdicionCreacion.getEmail().trim().equals("")) {
			JsfUtil.agregarMensaje(facesContext,msg,idFormulario+":"+idNotificacion,"Error","El correo no debe estar vac\u00edo",FacesMessage.SEVERITY_ERROR);
		}else {
			mensaje = cuentaService.registrarCuenta(cuentaEdicionCreacion);
			if(!mensaje.equals("")){
				JsfUtil.agregarMensaje(facesContext,msg,idFormulario+":"+idNotificacion,"Error","Error en registro : "+mensaje,FacesMessage.SEVERITY_ERROR);
			}else{
				cuentaEdicionCreacion.inicializarDatos();
				lstCuentas = null;
				
				if(cuentaEdicionCreacion.getIdCuenta()!=-1){
					JsfUtil.agregarMensaje(facesContext,msg,idFormulario+":"+idNotificacion,"\u00c9xito","Se registr\u00f3 la cuenta correctamente",FacesMessage.SEVERITY_INFO);
				}else{
					JsfUtil.agregarMensaje(facesContext,msg,idFormulario+":"+idNotificacion,"\u00c9xito","Se actualiz\u00f3 la cuenta correctamente",FacesMessage.SEVERITY_INFO);
				}
			}
		}*/
	}
	
	public void cargarDatosEdicion(){
		/*
		cuentaEdicionCreacion.inicializarDatos();
		
		if(cuentaSeleccionada!=null){
			cuentaEdicionCreacion.setIdCuenta(cuentaSeleccionada.getId());
			cuentaEdicionCreacion.setNombreCuenta(cuentaSeleccionada.getNombreCuenta());
			cuentaEdicionCreacion.setTipoCuenta(cuentaSeleccionada.getTipoCuenta().getId());
			cuentaEdicionCreacion.setCodigoPais(cuentaSeleccionada.getPais().getCodigoPais());
			cuentaEdicionCreacion.setIdCiudad(cuentaSeleccionada.getCiudad().getId());
			cuentaEdicionCreacion.setDireccion(cuentaSeleccionada.getDireccion());
			cuentaEdicionCreacion.setEmail(cuentaSeleccionada.getEmail());
			cuentaEdicionCreacion.setTelefono(cuentaSeleccionada.getTelefono());
			cuentaEdicionCreacion.setFax(cuentaSeleccionada.getFax());
		}*/
	}
	
	///////////
	//Eventos//
	///////////	
	/*
	public void restaurarListadoCiudades(ValueChangeEvent event) {
        if (event.getNewValue() != cuentaEdicionCreacion.getCodigoPais()) {
        	lstCiudades = null;
        }
    }

	public CuentaBean getCuentaEdicionCreacion() {
		return cuentaEdicionCreacion;
	}

	public void setCuentaEdicionCreacion(CuentaBean cuentaEdicionCreacion) {
		this.cuentaEdicionCreacion = cuentaEdicionCreacion;
	}*/

}